package com.exam.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.exam.entity.ApiResult;
import com.exam.entity.Message;
import com.exam.entity.Score;
import com.exam.serviceimpl.ScoreServiceImpl;
import com.exam.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/** 学生成绩模块
 *
 */
@RestController
public class ScoreController {
    @Autowired
    private ScoreServiceImpl scoreService;

    @GetMapping("/scores")
    public ApiResult findAll() {
        List<Score> res = scoreService.findAll();
        return ApiResultHandler.buildApiResult(200,"查询所有学生成绩",res);
    }

    /** 模块-页面：我的分数
     * 根据登录账号的学生studentId查询score表中该学生的所有成绩记录，并按scoreId倒序排列（后参加的考试后插入表中），封装后返回给前端进行展示。
     * @param page
     * @param size
     * @param studentId
     * @return
     */
    @GetMapping("/score/{page}/{size}/{studentId}")
    public ApiResult findById(@PathVariable("page") Integer page, @PathVariable("size") Integer size, @PathVariable("studentId") Integer studentId) {
        Page<Score> scorePage = new Page<>(page, size);
        IPage<Score> res = scoreService.findById(scorePage, studentId);
        return ApiResultHandler.buildApiResult(200, "根据ID查询成绩", res);
    }

    /** 模块-页面：成绩查询-学生成绩查询-“查看成绩”按钮
     * 根据用户选中的学生studentId在score表中查询指定学生的所有成绩记录，返回给前端实现折线图的展示。
     * @param studentId
     * @return
     */
    @GetMapping("/score/{studentId}")
        public ApiResult findById(@PathVariable("studentId") Integer studentId) {
        List<Score> res = scoreService.findById(studentId);
        if (!res.isEmpty()) {
            return ApiResultHandler.buildApiResult(200, "根据ID查询成绩", res);
        } else {
            return ApiResultHandler.buildApiResult(400, "ID不存在", res);
        }
    }

    /** “结束考试”按钮
     * 由前端examMsg.vue计算考试的试卷得分score后，封装到请求对象中后发送至此，插入一条记录到score表中。
     * @param score
     * @return
     */
    @PostMapping("/score")
    public ApiResult add(@RequestBody Score score) {
        int res = scoreService.add(score);
        if (res == 0) {
            return ApiResultHandler.buildApiResult(400,"成绩添加失败",res);
        }else {
            return ApiResultHandler.buildApiResult(200,"成绩添加成功",res);
        }
    }

    /** 模块-页面：成绩查询-成绩分段查询-“查看分段”按钮
     * 根据用户选中的考试examCode在score表中查询该门考试的所有成绩记录，并根据不同学生的studentId进行分组，只取该学生参加该门考试的最高分记录。
       将选中考试的所有成绩记录返回给前端，由前端scorePart.vue进行分段处理，展示饼图。
     * @param examCode
     * @return
     */
    @GetMapping("/scores/{examCode}")
    public ApiResult findByExamCode(@PathVariable("examCode") Integer examCode) {
        List<Score> scores = scoreService.findByExamCode(examCode);
        return ApiResultHandler.buildApiResult(200,"查询成功",scores);
    }
}
